const vscode = require('vscode');

function registerProblemCommands(context, chatViewProvider) {
    // 注册解释问题命令
    let explainProblemCommand = vscode.commands.registerCommand('gptdemo.explainProblem', async (problem) => {
        if (!problem) {
            vscode.window.showInformationMessage('没有可解释的问题');
            return;
        }

        // 显示聊天视图
        await vscode.commands.executeCommand('qwenChatView.focus');

        // 获取问题严重程度
        let severityText = '问题';
        if (problem.severity === vscode.DiagnosticSeverity.Error) {
            severityText = '错误';
        } else if (problem.severity === vscode.DiagnosticSeverity.Warning) {
            severityText = '警告';
        }

        // 构建消息对象
        const messageObj = {
            text: `请解释以下${severityText}：\n\`\`\`\n${problem.message}\n文件：${problem.file}\n位置：第${problem.line}行\n\n问题代码上下文：\n${problem.code}\n\`\`\`\n\n${problem.source ? `来源：${problem.source}\n` : ''}请分析问题原因并给出解决方案。`,
            mode: 'normal' // 使用普通模式
        };

        // 发送消息到 Webview
        if (chatViewProvider._view) {
            try {
                chatViewProvider._view.webview.postMessage({
                    command: 'sendMsg',
                    text: messageObj.text,
                    mode: messageObj.mode
                });
            } catch (error) {
                vscode.window.showErrorMessage('解释问题失败：' + error.message);
            }
        }
    });

    // 注册修复问题命令
    let fixProblemCommand = vscode.commands.registerCommand('gptdemo.fixProblem', async (problem) => {
        if (!problem) {
            vscode.window.showInformationMessage('没有可修复的问题');
            return;
        }

        // 显示聊天视图
        await vscode.commands.executeCommand('qwenChatView.focus');

        // 获取问题严重程度
        let severityText = '问题';
        if (problem.severity === vscode.DiagnosticSeverity.Error) {
            severityText = '错误';
        } else if (problem.severity === vscode.DiagnosticSeverity.Warning) {
            severityText = '警告';
        }

        // 构建消息对象
        const messageObj = {
            text: `请帮我修复以下${severityText}：\n\`\`\`\n${problem.message}\n文件：${problem.file}\n位置：第${problem.line}行\n\n问题代码上下文：\n${problem.code}\n\`\`\`\n\n${problem.source ? `来源：${problem.source}\n` : ''}请分析问题原因，并提供具体的修复代码和解释。如果需要修改代码，请使用write_to_file或replace_in_file工具进行修改。`,
            mode: 'agent' // 使用agent模式
        };

        // 发送消息到 Webview
        if (chatViewProvider._view) {
            try {
                chatViewProvider._view.webview.postMessage({
                    command: 'sendMsg',
                    text: messageObj.text,
                    mode: messageObj.mode
                });
            } catch (error) {
                vscode.window.showErrorMessage('修复问题失败：' + error.message);
            }
        }
    });

    context.subscriptions.push(explainProblemCommand, fixProblemCommand);
}

module.exports = registerProblemCommands; 